iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
自我挑戰組

Python 編程精通之路系列 第 11

第十一天:繼承和多態

  • 分享至 

  • xImage
  •  

在物件導向編程(OOP)中,繼承和多態是強大的概念,它們允許您建立層次結構的類和實現靈活性的代碼。

繼承:

繼承是一個類從另一個類獲取屬性和方法的過程。父類(也稱為基類或超類)中定義的屬性和方法可以被子類(也稱為派生類)繼承和重用。

以下是一個簡單的例子:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

在這個例子中,我們定義了一個Animal父類,它有一個屬性name和一個未實現的speak方法。然後,我們創建了Dog和Cat子類,並實現了speak方法。

多態:

多態是一個對不同類型的物件使用相同的接口的概念。這意味著不同類型的物件可以對相同的方法做出不同的回應。

讓我們使用上面的Animal、Dog和Cat類示例來演示多態:

def animal_sound(animal):
    return animal.speak()

dog = Dog("Buddy")
cat = Cat("Whiskers")

print(animal_sound(dog))  # 輸出:Buddy says Woof!
print(animal_sound(cat))  # 輸出:Whiskers says Meow!

這裡,我們創建了一個名為animal_sound的函數,它接受一個Animal對象作為參數,然後調用animal.speak()方法。無論是Dog還是Cat的實例,都可以作為參數傳遞給animal_sound函數,並且多態性使得它們可以對應不同的Speak行為。

# 定義一個名為Animal的父類
class Animal:
    # 父類的構造函數,接受一個name參數,用於設置物件的name屬性
    def __init__(self, name):
        self.name = name

    # 定義一個未實現的speak方法,子類將根據需要實現這個方法
    def speak(self):
        pass

# 定義一個名為Dog的子類,繼承自Animal
class Dog(Animal):
    # 子類的構造函數,接受一個name參數,並調用父類的構造函數設置name屬性
    def __init__(self, name):
        super().__init__(name)

    # 實現speak方法,返回一個描述狗叫聲的字符串
    def speak(self):
        return f"{self.name} says Woof!"

# 定義一個名為Cat的子類,繼承自Animal
class Cat(Animal):
    # 子類的構造函數,接受一個name參數,並調用父類的構造函數設置name屬性
    def __init__(self, name):
        super().__init__(name)

    # 實現speak方法,返回一個描述貓叫聲的字符串
    def speak(self):
        return f"{self.name} says Meow!"

# 定義一個函數animal_sound,接受一個Animal對象作為參數
def animal_sound(animal):
    # 調用animal對象的speak方法,返回該物件的叫聲
    return animal.speak()

# 創建一個名為dog的Dog類的實例,name設為"Buddy"
dog = Dog("Buddy")

# 創建一個名為cat的Cat類的實例,name設為"Whiskers"
cat = Cat("Whiskers")

# 調用animal_sound函數,傳遞dog對象作為參數,並輸出結果
print(animal_sound(dog))  # 輸出:Buddy says Woof!

# 調用animal_sound函數,傳遞cat對象作為參數,並輸出結果
print(animal_sound(cat))  # 輸出:Whiskers says Meow!

這種繼承和多態的概念使得代碼更加靈活,允許您輕鬆擴展和維護大型項目,並使代碼更易讀和理解。繼續學習OOP的高級主題,以更好地利用這些概念來解決複雜的問題。


上一篇
第十天:物件導向編程(OOP)基礎
下一篇
第十二天:字典(Dictionaries)
系列文
Python 編程精通之路20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言